import axios, { AxiosHeaders } from "axios";
import { Dialog } from 'vant';
import type { AxiosRequestConfig } from "axios";
// 创建axios 实例
const instance = axios.create({
    baseURL: "http://47.94.148.165:3001/api",
    // 请求时间
    timeout: 10000
})


 // 制作一个自己的请求头格式
    // myAxiosRequestConfig 继承自 AxiosRequestConfig
    //   用来限制的是 config 这个对象
    // 我再使用断言的时候
    // config.headers as myAxiosRequestConfig
    // 修改后
    // (config as myAxiosRequestConfig).headers.token
    interface myAxiosRequestConfig extends AxiosRequestConfig {
        headers: { token?: string | null }
    }

// 配置请求拦截器
instance.interceptors.request.use(config => {

    // console.log(config.url);
    // 判断是 获取用户信息
    if (config.url === '/user/info') {
        // (config.headers as AxiosRequestConfig<AxiosHeaders>).token = window.localStorage.getItem('token')
        (config as myAxiosRequestConfig).headers.token = window.localStorage.getItem('token')
    }
    // 判断是 购物车
    // 所有的购物车相关接口都是 /cart/xxxx
    // 只要判断是以 /cart 开头的, 就可以
    // 每一个购物车相关的接口都要判断 token 是否真实有效
    // 可以在响应拦截器内做判断
    if (/^\/cart/.test(config.url as string)) {
        // (config.headers as AxiosRequestConfig<AxiosHeaders>).token = window.localStorage.getItem('token')
        (config as myAxiosRequestConfig).headers.token = window.localStorage.getItem('token')
    }

    // 判断 查询订单
    if (config.url === '/user/orderlist') {
        //  (config.headers as AxiosRequestConfig<AxiosHeaders>).token = window.localStorage.getItem('token')
        (config as myAxiosRequestConfig).headers.token = window.localStorage.getItem('token')
    }

    return config
})
// 配置响应拦截器
instance.interceptors.response.use(
    response => {
        // 判断如果内容返回的内容为code 为 '10119'
        //说明token 无效
        if (response.data.code === '10119') {
            Dialog({
                title: '提示',
                message: '你登录状态有问题，请重新登录'
            })
            return { code: 0 }
        }
        return response.data
    },
    err => {
        // console.log('本次请求失败', err);
        Dialog.alert({ title: '网络错误', message: '网络不给力，稍后再来' })
    }
)
// 导出实例
export default instance